/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package models.negocio;

import config.LogErro;
import controllers.AtributoAuxController;
import controllers.AtributoDimController;
import controllers.LigacaoController;
import java.io.Serializable;
import java.util.ArrayList;
import models.dados.HibernateDAO;
import models.dados.HibernateUtil;
import models.entidades.AtributoDimensao;
import models.entidades.AtributoTabAux;
import models.entidades.Ligacao;
import models.entidades.LigacaoId;
import models.entidades.Procedimento;
import models.entidades.Referencia;
import views.utilitario.LigacaoAtributo;

/**
 *
 * @author Wenderson
 */
public class NegocioProcedimento extends HibernateDAO<Procedimento, Integer> {
    
    public NegocioProcedimento() {
        super(Procedimento.class);
    }
    
    public boolean inserir(Procedimento p, ArrayList<LigacaoAtributo> lista) {
        try {
            HibernateUtil.beginTransaction();
            
            HibernateUtil.getSession().save(p);
            
            HibernateUtil.getSession().flush();
            
            System.out.println("CD PROCEDIMENTO: " + p.getCdProcedimento());
            
            for (LigacaoAtributo la : lista) {
                AtributoDimensao ad = (AtributoDimensao) HibernateUtil.getSession().load(AtributoDimensao.class, la.getCdDim());//AtributoDimController.obter(la.getCdDim());
                AtributoTabAux at = (AtributoTabAux) HibernateUtil.getSession().load(AtributoTabAux.class, la.getCdAux());//AtributoAuxController.obter(la.getCdAux());
                
                Referencia r = new Referencia();
                r.setAtributoDimensao(ad);
                r.setAtributoTabAux(at);
                
                System.out.println("CD A: " + la.getCdAux() + "  AT D: " + la.getCdDim());
                System.out.println("CD A: " + at.getCdAtTabAux() + "  AT D: " + ad.getCdAtDimensao());
                
                HibernateUtil.getSession().save(r);
                HibernateUtil.getSession().flush();
                
                System.out.println("REFERENCIA: " + r.getCdReferencia());
                
                Ligacao l = new Ligacao();
                l.setProcedimento(p);
                l.setReferencia(r);
                l.setFlTrans(la.isTrans() ? 'S' : 'N');
                l.setId(new LigacaoId(p.getCdProcedimento(), r.getCdReferencia()));
                
                //LigacaoController.inserir(l);
                HibernateUtil.getSession().save(l);
            }
            
            HibernateUtil.commitTransaction();
            
            return true;
        } catch (Exception e) {
            HibernateUtil.rollBackTransaction();
            LogErro.gravaErro(e);e.printStackTrace();
        }
        
        return false;
    }
}
